﻿using Negocio.View.Base;
using System.Data;
using Negocio.Generico;
using System;

namespace Negocio.View
{

    /// <summary>
    /// View de los profesoress
    /// </summary>
    public class ProfesorView : ViewBase
    {

        #region Singleton

        private static ProfesorView instance;

        private ProfesorView() 
        {
            //Constructor vacio
        }

        public static ProfesorView GetInstance() 
        {
            if (instance == null) 
            {
                instance = new ProfesorView();
            }
            return instance;
        }

        #endregion

        #region Constantes

        /// <summary>
        /// Codigo de la persona fisica que es el profesor
        /// </summary>
        private const string CODIGOPERSONA = "CODIGOPERSONA";

        /// <summary>
        /// Codigo del profesor
        /// </summary>
        private const string CODIGOPROFESOR = "CODIGOPROFESOR";

        /// <summary>
        /// Nivel de estudios que posee el profesor
        /// </summary>
        private const string NIVELESTUDIOS = "NIVELESTUDIOS";



        /// <summary>
        /// DNI del usuario
        /// </summary>
        private const string DNI = "DNI";


        /// <summary>
        /// Imagen de la persona(Avatar)
        /// </summary>
        private const string IMAGEN = "IMAGEN";

        /// <summary>
        /// Userhash para la codificacion de la seguridad
        /// </summary>
        private const string USERHASH = "USERHASH";

        /// <summary>
        /// Nombre del usuario
        /// </summary>
        private const string NOMBRE = "NOMBRE";

        /// <summary>
        /// Apellido 1 de la persona
        /// </summary>
        private const string APELLIDO1 = "APELLIDO1";

        /// <summary>
        /// Apellido 2 de la persona
        /// </summary>
        private const string APELLIDO2 = "APELLIDO2";

        /// <summary>
        /// Correo electrónico
        /// </summary>
        private const string EMAIL = "EMAIL";

        /// <summary>
        /// Nick de la persona
        /// </summary>
        private const string NICK = "NICK";


        #endregion

        #region View

        /// <summary>
        /// Funcion que devuelve un listado de profesores sin parametros de filtro
        /// </summary>
        /// <returns>Dataview contenedor de los datos</returns>
        public DataView GetProfesoresView() 
        {
            return this.GetProfesoresView(new ProfesorDTO());
        }

        /// <summary>
        /// Funcion que devuelve un listado de profesores
        /// </summary>
        /// <returns>Dataview que contiene los reusltados de la busqueda</returns>
        public DataView GetProfesoresView(ProfesorDTO filtro) 
        {
            try
            {
                DataView dv = new DataView();
                //DataTable dt = new DataTable("Profesor");
                DataTable dt = new DataTable();

                dt.Columns.Add(ProfesorView.CODIGOPERSONA, this.GetTypeSqlInt32);
                dt.Columns.Add(ProfesorView.CODIGOPROFESOR, this.GetTypeSqlInt32);
                dt.Columns.Add(ProfesorView.NIVELESTUDIOS, this.GetTypeString);
                dt.Columns.Add(ProfesorView.DNI, this.GetTypeString);
                dt.Columns.Add(ProfesorView.IMAGEN, this.GetTypeByteArray);
                dt.Columns.Add(ProfesorView.USERHASH, this.GetTypeString);
                dt.Columns.Add(ProfesorView.NOMBRE, this.GetTypeString);
                dt.Columns.Add(ProfesorView.APELLIDO1, this.GetTypeString);
                dt.Columns.Add(ProfesorView.APELLIDO2, this.GetTypeString);
                dt.Columns.Add(ProfesorView.EMAIL, this.GetTypeString);
                dt.Columns.Add(ProfesorView.NICK, this.GetTypeString);

                using (ContratoGenericoClient servicio = new ContratoGenericoClient()) 
                {
                    foreach (ProfesorDTO bean in servicio.Get(filtro)) 
                    {
                        DataRow dr = dt.NewRow();
                        dr[ProfesorView.CODIGOPERSONA] = bean.CoPersona;
                        dr[ProfesorView.CODIGOPROFESOR] = bean.CoProfesor;
                        dr[ProfesorView.NIVELESTUDIOS] = bean.NivelEstudios;
                        dr[ProfesorView.DNI] = bean.Dni;
                        dr[ProfesorView.IMAGEN] = bean.Imagen;
                        dr[ProfesorView.USERHASH] = bean.Userhash;
                        dr[ProfesorView.NOMBRE] = bean.Nombre;
                        dr[ProfesorView.APELLIDO1] = bean.Apellido1;
                        dr[ProfesorView.APELLIDO2] = bean.Apellido2;
                        dr[ProfesorView.EMAIL] = bean.Email;
                        dr[ProfesorView.NICK] = bean.Nick;
                        dt.Rows.Add(dr);
                    }
                }        
                return dt.DefaultView;
            }
            catch (Exception ex)
            {
                throw new ViewException(ex);
            }
        }


     


       
        #endregion
    }
}